Quickstart¶
[1]:
import numpy as np
import matplotlib.pyplot as plt
import ipyvasp as ipv
Transform POSCAR¶
Let’s create some dummy POSCAR.
[2]:
poscar = ipv.POSCAR.new(
[[0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5]],
{"Ga": [[0.0, 0.0, 0.0]],"As": [[0.25, 0.25, 0.25]]},
scale = 5
)
poscar.write("POSCAR") # need it later
site_kws = dict(alpha=1)
ax1, ax2, ax3 = ipv.get_axes((8,3),ncols=3, axes_3d=[0,1,2])
poscar.splot_lattice( ax = ax1, fill = False,label='original',
site_kws=site_kws)
_ = poscar.transform(lambda a,b,c: (b+c-a, a+c-b, a+b-c)).transpose([1,2,0]) # bring a1 to x
print(poscar.last.data.metadata.TM)
poscar.last.splot_lattice( # .last points to last created POSCAR in transform
ax=ax2, fill = False, color='red', label='transformed',
site_kws=site_kws
)
poscar.last.splot_plane([1,1,0],1/2,ax=ax2)
poscar.transform(lambda a,b,c: (a-c,b-c,a+b+c)
).set_zdir([0,0,1]).splot_lattice(ax=ax3,color='red')
print(poscar.last.data.metadata.TM)
ax1.view_init(azim=-25, elev=15)
ax2.view_init(azim=-35, elev=15)
---------------------------------------------------------------------------
FileExistsError Traceback (most recent call last)
Cell In[2], line 8
1 poscar = ipv.POSCAR.new(
2 [[0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5]],
3 {"Ga": [[0.0, 0.0, 0.0]],"As": [[0.25, 0.25, 0.25]]},
4
5 scale = 5
6 )
----> 8 poscar.write("POSCAR") # need it later
10 site_kws = dict(alpha=1)
11 ax1, ax2, ax3 = ipv.get_axes((8,3),ncols=3, axes_3d=[0,1,2])
File /opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/ipyvasp/lattice.py:736, in POSCAR.write(self, outfile, **kwargs)
733 @_sub_doc(plat.write_poscar)
734 @_sig_kwargs(plat.write_poscar, ("poscar_data",))
735 def write(self, outfile=None, **kwargs):
--> 736 return plat.write_poscar(self.data, outfile=outfile, **kwargs)
File /opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/ipyvasp/_lattice.py:296, in write_poscar(poscar_data, outfile, selective_dynamics, overwrite, comment, scale)
294 f.write(out_str)
295 else:
--> 296 raise FileExistsError(
297 f"{outfile!r} exists, can not overwrite, \nuse overwrite=True if you want to chnage."
298 )
299 else:
300 print(out_str)
FileExistsError: 'POSCAR' exists, can not overwrite,
use overwrite=True if you want to chnage.
[3]:
poscar.splot_bz(fill = True,color='skyblue', vectors=None,lw=0.1).set_axis_off()
ax = poscar.splot_kpath([(0,0,0), (1/4,1/2,-1/4), (0.5,0.5,0), (0,0,0), (0,0.5,0)],
labels = ['Γ', 'K', 'X', 'Γ', 'L'], fmt_label=lambda lab: lab+'\n')
ax.view_init(azim=55, elev=25)
<Figure size 489.6x489.6 with 0 Axes>
[4]:
fig = poscar.iplot_bz(color='blue')
ipv.iplot2html(fig)
[4]:
K-Path¶
We can interplate kpath based on current POSCAR, it gives correct distance between points.
[5]:
poscar.get_kpath([
(0,0,0,'Γ'),
(1/4,1/2,-1/4,'K'),
(0.5,0.5,0,'X'),
(0,0,0,'Γ'),
(0,0.5,0,'L')
], n=8)
Automatically generated using ipyvasp for HSK-PATH 0:Γ, 4:K, 5:X, 9:Γ, 12:L
13
Reciprocal Lattice
0.0000000000 0.0000000000 0.0000000000 0.076923
0.0625000000 0.1250000000 -0.0625000000 0.076923
0.1250000000 0.2500000000 -0.1250000000 0.076923
0.1875000000 0.3750000000 -0.1875000000 0.076923
0.2500000000 0.5000000000 -0.2500000000 0.076923
0.5000000000 0.5000000000 0.0000000000 0.076923
0.3750000000 0.3750000000 0.0000000000 0.076923
0.2500000000 0.2500000000 0.0000000000 0.076923
0.1250000000 0.1250000000 0.0000000000 0.076923
0.0000000000 0.0000000000 0.0000000000 0.076923
0.0000000000 0.1666666667 0.0000000000 0.076923
0.0000000000 0.3333333333 0.0000000000 0.076923
0.0000000000 0.5000000000 0.0000000000 0.076923
[6]:
poscar.get_kmesh(2,2,2, weight=0)
Generated uniform mesh using ipyvasp, GRID-SHAPE = [2,2,2]
8
Reciprocal
0.0000000000 0.0000000000 0.0000000000 0.000000
1.0000000000 0.0000000000 0.0000000000 0.000000
0.0000000000 1.0000000000 0.0000000000 0.000000
1.0000000000 1.0000000000 0.0000000000 0.000000
0.0000000000 0.0000000000 1.0000000000 0.000000
1.0000000000 0.0000000000 1.0000000000 0.000000
0.0000000000 1.0000000000 1.0000000000 0.000000
1.0000000000 1.0000000000 1.0000000000 0.000000
[7]:
view = poscar.view_weas(colors={'Ga':'red','As':'blue'})
view
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[7], line 1
----> 1 view = poscar.view_weas(colors={'Ga':'red','As':'blue'})
2 view
File /opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/ipyvasp/lattice.py:436, in POSCAR.view_weas(self, **kwargs)
433 @_sub_doc(weas_viewer)
434 @_sig_kwargs(weas_viewer, ("poscar",))
435 def view_weas(self, **kwargs):
--> 436 return weas_viewer(self, **kwargs)
File /opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/ipyvasp/lattice.py:216, in weas_viewer(poscar, sizes, colors, bond_length, model_style, plot_cell, origin, eqv_sites)
188 def weas_viewer(poscar,
189 sizes=1,
190 colors=None,
(...)
195 eqv_sites = True,
196 ):
197 """
198 sizes : float or dict of type -> float
199 Size of sites. Either one int/float or a mapping like {'Ga': 2, ...}.
(...)
213 Read what you can do more with `WeasWidget` [here](https://weas-widget.readthedocs.io/en/latest/index.html).
214 """
--> 216 from weas_widget import WeasWidget
218 if len(poscar.data.positions) < 1:
219 raise ValueError("Need at least 1 atom!")
ModuleNotFoundError: No module named 'weas_widget'
If you are not seeing interactive widget above, don’t worry! We’ve got you covered with a screenshot below:
[8]:
view.download_image('weas.png')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[8], line 1
----> 1 view.download_image('weas.png')
NameError: name 'view' is not defined

Live View of POSCAR Operations¶
Batch analysis using Files class.¶
[9]:
files = ipv.Files('.')
files
[9]:
Files(
PosixPath('POSCAR'),
PosixPath('quickstart.ipynb'),
PosixPath('weas.png')
) 3 items
[10]:
files.summarize(lambda path: {'end': path.parts[-1]})
[10]:
| end | FILE | |
|---|---|---|
| 0 | POSCAR | POSCAR |
| 1 | quickstart.ipynb | quickstart.ipynb |
| 2 | weas.png | weas.png |
[11]:
files.map(lambda p: p.suffix,to_df=True)
[11]:
| 0 | 1 | |
|---|---|---|
| 0 | POSCAR | |
| 1 | quickstart.ipynb | .ipynb |
| 2 | weas.png | .png |
[12]:
files.interactive(lambda file: print(file))
[12]:
[13]:
files.filtered('py')
[13]:
Files(
PosixPath('quickstart.ipynb')
) 1 items
Example: View Lattice and BZ side by side¶
[14]:
import plotly.graph_objects as go
import ipyvasp as ipv
fs = ipv.Files('.','POSCAR')
@fs.interact(fig1 = go.FigureWidget(), fig2 = go.FigureWidget(),
app_layout={"left_sidebar": ('file', 'fig2'), 'center':('fig1',),'pane_widths':[2,3,0]})
def view(file, fig1, fig2):
pos = ipv.POSCAR(file)
ipv.iplot2widget(pos.iplot_bz(), fig_widget=fig2)
ipv.iplot2widget(pos.iplot_lattice(), fig_widget=fig1)